a11y: Consolidate the attributes container
authorEmmanuele Bassi <ebassi@gnome.org>
Fri, 17 Jul 2020 11:49:59 +0000 (12:49 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Sun, 26 Jul 2020 19:31:15 +0000 (20:31 +0100)
While we have split the various attributes for convenience, there's no
reason why we should have specialised data types for the attributes
container object.

12 files changed:
gtk/gtkaccessibleattributeset.c [new file with mode: 0644]
gtk/gtkaccessibleattributesetprivate.h [new file with mode: 0644]
gtk/gtkaccessiblepropertyset.c [deleted file]
gtk/gtkaccessiblepropertysetprivate.h [deleted file]
gtk/gtkaccessiblerelationset.c [deleted file]
gtk/gtkaccessiblerelationsetprivate.h [deleted file]
gtk/gtkaccessiblestateset.c [deleted file]
gtk/gtkaccessiblestatesetprivate.h [deleted file]
gtk/gtkatcontext.c
gtk/gtkatcontextprivate.h
gtk/gtktestatcontext.c
gtk/meson.build

diff --git a/gtk/gtkaccessibleattributeset.c b/gtk/gtkaccessibleattributeset.c
new file mode 100644 (file)
index 0000000..0a24a7f
--- /dev/null
@@ -0,0 +1,249 @@
+/* gtkaccessibleattributeset.c: Accessible attribute containt
+ *
+ * Copyright 2020  GNOME Foundation
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include "gtkaccessibleattributesetprivate.h"
+
+#include "gtkbitmaskprivate.h"
+#include "gtkenums.h"
+
+struct _GtkAccessibleAttributeSet
+{
+  gsize n_attributes;
+
+  GtkAccessibleAttributeDefaultFunc default_func;
+
+  GtkBitmask *attributes_set;
+
+  char **attribute_names;
+  GtkAccessibleValue **attribute_values;
+};
+
+static GtkAccessibleAttributeSet *
+gtk_accessible_attribute_set_init (GtkAccessibleAttributeSet          *self,
+                                   gsize                               n_attributes,
+                                   const char                        **attribute_names,
+                                   GtkAccessibleAttributeDefaultFunc   default_func)
+{
+  self->n_attributes = n_attributes;
+  self->default_func = default_func;
+  self->attribute_names = g_new (char *, n_attributes);
+  self->attribute_values = g_new (GtkAccessibleValue *, n_attributes);
+  self->attributes_set = _gtk_bitmask_new ();
+
+  /* Initialize all attribute values, so we can always get the full attribute */
+  for (int i = 0; i < self->n_attributes; i++)
+    {
+      self->attribute_names[i] = g_strdup (attribute_names[i]);
+      self->attribute_values[i] = (* self->default_func) (i);
+    }
+
+  return self;
+}
+
+GtkAccessibleAttributeSet *
+gtk_accessible_attribute_set_new (gsize                               n_attributes,
+                                  const char                        **attribute_names,
+                                  GtkAccessibleAttributeDefaultFunc   default_func)
+{
+  GtkAccessibleAttributeSet *set = g_rc_box_new0 (GtkAccessibleAttributeSet);
+
+  return gtk_accessible_attribute_set_init (set, n_attributes, attribute_names, default_func);
+}
+
+GtkAccessibleAttributeSet *
+gtk_accessible_attribute_set_ref (GtkAccessibleAttributeSet *self)
+{
+  g_return_val_if_fail (self != NULL, NULL);
+
+  return g_rc_box_acquire (self);
+}
+
+static void
+gtk_accessible_attribute_set_free (gpointer data)
+{
+  GtkAccessibleAttributeSet *self = data;
+
+  for (int i = 0; i < self->n_attributes; i++)
+    {
+      g_free (self->attribute_names[i]);
+
+      if (self->attribute_values[i] != NULL)
+        gtk_accessible_value_unref (self->attribute_values[i]);
+    }
+
+  g_free (self->attribute_names);
+  g_free (self->attribute_values);
+
+  _gtk_bitmask_free (self->attributes_set);
+}
+
+void
+gtk_accessible_attribute_set_unref (GtkAccessibleAttributeSet *self)
+{
+  g_rc_box_release_full (self, gtk_accessible_attribute_set_free);
+}
+
+/*< private >
+ * gtk_accessible_attribute_set_add:
+ * @self: a #GtkAccessibleAttributeSet
+ * @attribute: the attribute to set
+ * @value: (nullable): a #GtkAccessibleValue
+ *
+ * Adds @attribute to the attributes set, and sets its value.
+ *
+ * If @value is %NULL, the @attribute is reset to its default value.
+ *
+ * If you want to remove @attribute from the set, use gtk_accessible_attribute_set_remove()
+ * instead.
+ */
+void
+gtk_accessible_attribute_set_add (GtkAccessibleAttributeSet *self,
+                                  int                        attribute,
+                                  GtkAccessibleValue        *value)
+{
+  g_return_if_fail (attribute >= 0 && attribute < self->n_attributes);
+
+  g_clear_pointer (&(self->attribute_values[attribute]), gtk_accessible_value_unref);
+
+  if (value != NULL)
+    self->attribute_values[attribute] = gtk_accessible_value_ref (value);
+  else
+    self->attribute_values[attribute] = (* self->default_func) (attribute);
+
+  self->attributes_set = _gtk_bitmask_set (self->attributes_set, attribute, TRUE);
+}
+
+void
+gtk_accessible_attribute_set_remove (GtkAccessibleAttributeSet *self,
+                                     int                        attribute)
+{
+  g_return_if_fail (attribute >= 0 && attribute < self->n_attributes);
+
+  g_clear_pointer (&(self->attribute_values[attribute]), gtk_accessible_value_unref);
+
+  self->attribute_values[attribute] = (* self->default_func) (attribute);
+  self->attributes_set = _gtk_bitmask_set (self->attributes_set, attribute, FALSE);
+}
+
+gboolean
+gtk_accessible_attribute_set_contains (GtkAccessibleAttributeSet *self,
+                                       int                        attribute)
+ {
+  g_return_val_if_fail (attribute >= 0 && attribute < self->n_attributes, FALSE);
+
+  return _gtk_bitmask_get (self->attributes_set, attribute);
+}
+
+/*< private >
+ * gtk_accessible_attribute_set_get_value:
+ * @self: a #GtkAccessibleAttributeSet
+ * @attribute: the attribute to retrieve
+ *
+ * Retrieves the value of the given @attribute in the set.
+ *
+ * Returns: (transfer none): the value for the attribute
+ */
+GtkAccessibleValue *
+gtk_accessible_attribute_set_get_value (GtkAccessibleAttributeSet *self,
+                                        int                        attribute)
+{
+  g_return_val_if_fail (attribute >= 0 && attribute < self->n_attributes, NULL);
+
+  return self->attribute_values[attribute];
+}
+
+gsize
+gtk_accessible_attribute_set_get_length (GtkAccessibleAttributeSet *self)
+{
+  return self->n_attributes;
+}
+
+guint
+gtk_accessible_attribute_set_get_changed (GtkAccessibleAttributeSet *self)
+{
+  guint changed = 0;
+
+  for (gsize i = 0; i < self->n_attributes; i++)
+    {
+      if (gtk_accessible_attribute_set_contains (self, i))
+        changed |= (1 << i);
+    }
+
+  return changed;
+}
+
+/*< private >
+ * gtk_accessible_attribute_set_print:
+ * @self: a #GtkAccessibleAttributeSet
+ * @only_set: %TRUE if only the set attributes should be printed
+ * @buffer: a #GString
+ *
+ * Prints the contents of the #GtkAccessibleAttributeSet into @buffer.
+ */
+void
+gtk_accessible_attribute_set_print (GtkAccessibleAttributeSet *self,
+                                    gboolean                   only_set,
+                                    GString                   *buffer)
+{
+  if (only_set && _gtk_bitmask_is_empty (self->attributes_set))
+    {
+      g_string_append (buffer, "{}");
+      return;
+    }
+
+  g_string_append (buffer, "{\n");
+
+  for (gsize i = 0; i < self->n_attributes; i++)
+    {
+      if (only_set && !_gtk_bitmask_get (self->attributes_set, i))
+        continue;
+
+      g_string_append (buffer, "    ");
+      g_string_append (buffer, self->attribute_names[i]);
+      g_string_append (buffer, ": ");
+
+      gtk_accessible_value_print (self->attribute_values[i], buffer);
+
+      g_string_append (buffer, ",\n");
+    }
+
+  g_string_append (buffer, "}");
+}
+
+/*< private >
+ * gtk_accessible_attribute_set_to_string:
+ * @self: a #GtkAccessibleAttributeSet
+ *
+ * Prints the contents of a #GtkAccessibleAttributeSet into a string.
+ *
+ * Returns: (transfer full): a newly allocated string with the contents
+ *   of the #GtkAccessibleAttributeSet
+ */
+char *
+gtk_accessible_attribute_set_to_string (GtkAccessibleAttributeSet *self)
+{
+  GString *buf = g_string_new (NULL);
+
+  gtk_accessible_attribute_set_print (self, TRUE, buf);
+
+  return g_string_free (buf, FALSE);
+}
diff --git a/gtk/gtkaccessibleattributesetprivate.h b/gtk/gtkaccessibleattributesetprivate.h
new file mode 100644 (file)
index 0000000..57a1e63
--- /dev/null
@@ -0,0 +1,57 @@
+/* gtkaccessibleattributesetprivate.h: Accessible attribute container
+ *
+ * Copyright 2020  GNOME Foundation
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "gtkaccessibleprivate.h"
+#include "gtkaccessiblevalueprivate.h"
+
+G_BEGIN_DECLS
+
+typedef struct _GtkAccessibleAttributeSet       GtkAccessibleAttributeSet;
+
+typedef GtkAccessibleValue *(* GtkAccessibleAttributeDefaultFunc) (int attribute);
+
+GtkAccessibleAttributeSet *     gtk_accessible_attribute_set_new                (gsize                       n_attributes,
+                                                                                 const char                **attr_names,
+                                                                                 GtkAccessibleAttributeDefaultFunc default_func);
+GtkAccessibleAttributeSet *     gtk_accessible_attribute_set_ref                (GtkAccessibleAttributeSet  *self);
+void                            gtk_accessible_attribute_set_unref              (GtkAccessibleAttributeSet  *self);
+
+gsize                           gtk_accessible_attribute_set_get_length         (GtkAccessibleAttributeSet  *self);
+
+void                            gtk_accessible_attribute_set_add                (GtkAccessibleAttributeSet  *self,
+                                                                                 int                         attribute,
+                                                                                 GtkAccessibleValue         *value);
+void                            gtk_accessible_attribute_set_remove             (GtkAccessibleAttributeSet  *self,
+                                                                                 int                         state);
+gboolean                        gtk_accessible_attribute_set_contains           (GtkAccessibleAttributeSet  *self,
+                                                                                 int                         state);
+GtkAccessibleValue *            gtk_accessible_attribute_set_get_value          (GtkAccessibleAttributeSet  *self,
+                                                                                 int                         state);
+
+guint                           gtk_accessible_attribute_set_get_changed        (GtkAccessibleAttributeSet   *self);
+
+void                            gtk_accessible_attribute_set_print              (GtkAccessibleAttributeSet  *self,
+                                                                                 gboolean                    only_set,
+                                                                                 GString                    *string);
+char *                          gtk_accessible_attribute_set_to_string          (GtkAccessibleAttributeSet  *self);
+
+G_END_DECLS
diff --git a/gtk/gtkaccessiblepropertyset.c b/gtk/gtkaccessiblepropertyset.c
deleted file mode 100644 (file)
index a50ff8a..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-/* gtkaccessiblepropertyset.c: Accessible properties
- *
- * Copyright 2020  GNOME Foundation
- *
- * SPDX-License-Identifier: LGPL-2.1-or-later
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "config.h"
-
-#include "gtkaccessiblepropertysetprivate.h"
-
-#include "gtkbitmaskprivate.h"
-#include "gtkenums.h"
-
-/* Keep in sync with GtkAccessibleProperty in gtkenums.h */
-#define LAST_PROPERTY GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT
-
-struct _GtkAccessiblePropertySet
-{
-  GtkBitmask *property_set;
-
-  GtkAccessibleValue **property_values;
-};
-
-static GtkAccessiblePropertySet *
-gtk_accessible_property_set_init (GtkAccessiblePropertySet *self)
-{
-  self->property_set = _gtk_bitmask_new ();
-  self->property_values = g_new (GtkAccessibleValue *, LAST_PROPERTY);
-
-  /* Initialize all property values, so we can always get the full set */
-  for (int i = 0; i < LAST_PROPERTY; i++)
-    self->property_values[i] = gtk_accessible_value_get_default_for_property (i);
-
-  return self;
-}
-
-GtkAccessiblePropertySet *
-gtk_accessible_property_set_new (void)
-{
-  GtkAccessiblePropertySet *set = g_rc_box_new0 (GtkAccessiblePropertySet);
-
-  return gtk_accessible_property_set_init (set);
-}
-
-GtkAccessiblePropertySet *
-gtk_accessible_property_set_ref (GtkAccessiblePropertySet *self)
-{
-  g_return_val_if_fail (self != NULL, NULL);
-
-  return g_rc_box_acquire (self);
-}
-
-static void
-gtk_accessible_property_set_free (gpointer data)
-{
-  GtkAccessiblePropertySet *self = data;
-
-  for (int i = 0; i < LAST_PROPERTY; i++)
-    {
-      if (self->property_values[i] != NULL)
-        gtk_accessible_value_unref (self->property_values[i]);
-    }
-
-  g_free (self->property_values);
-
-  _gtk_bitmask_free (self->property_set);
-}
-
-void
-gtk_accessible_property_set_unref (GtkAccessiblePropertySet *self)
-{
-  g_rc_box_release_full (self, gtk_accessible_property_set_free);
-}
-
-void
-gtk_accessible_property_set_add (GtkAccessiblePropertySet *self,
-                                 GtkAccessibleProperty     property,
-                                 GtkAccessibleValue       *value)
-{
-  g_return_if_fail (property >= GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE &&
-                    property <= GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT);
-
-  if (gtk_accessible_property_set_contains (self, property))
-    gtk_accessible_value_unref (self->property_values[property]);
-  else
-    self->property_set = _gtk_bitmask_set (self->property_set, property, TRUE);
-
-  self->property_values[property] = gtk_accessible_value_ref (value);
-}
-
-void
-gtk_accessible_property_set_remove (GtkAccessiblePropertySet *self,
-                                    GtkAccessibleProperty     property)
-{
-  g_return_if_fail (property >= GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE &&
-                    property <= GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT);
-
-  if (gtk_accessible_property_set_contains (self, property))
-    {
-      g_clear_pointer (&(self->property_values[property]), gtk_accessible_value_unref);
-      self->property_set = _gtk_bitmask_set (self->property_set, property, FALSE);
-    }
-}
-
-gboolean
-gtk_accessible_property_set_contains (GtkAccessiblePropertySet *self,
-                                      GtkAccessibleProperty     property)
-{
-  g_return_val_if_fail (property >= GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE &&
-                        property <= GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT,
-                        FALSE);
-
-  return _gtk_bitmask_get (self->property_set, property);
-}
-
-GtkAccessibleValue *
-gtk_accessible_property_set_get_value (GtkAccessiblePropertySet *self,
-                                       GtkAccessibleProperty     property)
-{
-  g_return_val_if_fail (property >= GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE &&
-                        property <= GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT,
-                        NULL);
-
-  return self->property_values[property];
-}
-
-static const char *property_names[] = {
-  [GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE]     = "autocomplete",
-  [GTK_ACCESSIBLE_PROPERTY_DESCRIPTION]      = "description",
-  [GTK_ACCESSIBLE_PROPERTY_HAS_POPUP]        = "haspopup",
-  [GTK_ACCESSIBLE_PROPERTY_KEY_SHORTCUTS]    = "keyshortcuts",
-  [GTK_ACCESSIBLE_PROPERTY_LABEL]            = "label",
-  [GTK_ACCESSIBLE_PROPERTY_LEVEL]            = "level",
-  [GTK_ACCESSIBLE_PROPERTY_MODAL]            = "modal",
-  [GTK_ACCESSIBLE_PROPERTY_MULTI_LINE]       = "multiline",
-  [GTK_ACCESSIBLE_PROPERTY_MULTI_SELECTABLE] = "multiselectable",
-  [GTK_ACCESSIBLE_PROPERTY_ORIENTATION]      = "orientation",
-  [GTK_ACCESSIBLE_PROPERTY_PLACEHOLDER]      = "placeholder",
-  [GTK_ACCESSIBLE_PROPERTY_READ_ONLY]        = "readonly",
-  [GTK_ACCESSIBLE_PROPERTY_REQUIRED]         = "required",
-  [GTK_ACCESSIBLE_PROPERTY_ROLE_DESCRIPTION] = "roledescription",
-  [GTK_ACCESSIBLE_PROPERTY_SORT]             = "sort",
-  [GTK_ACCESSIBLE_PROPERTY_VALUE_MAX]        = "valuemax",
-  [GTK_ACCESSIBLE_PROPERTY_VALUE_MIN]        = "valuemin",
-  [GTK_ACCESSIBLE_PROPERTY_VALUE_NOW]        = "valuenow",
-  [GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT]       = "valuetext",
-};
-
-/*< private >
- * gtk_accessible_property_set_print:
- * @self: a #GtkAccessiblePropertySet
- * @only_set: %TRUE if only the set properties should be printed
- * @buffer: a #GString
- *
- * Prints the contents of the #GtkAccessiblePropertySet into @buffer.
- */
-void
-gtk_accessible_property_set_print (GtkAccessiblePropertySet *self,
-                                   gboolean               only_set,
-                                   GString               *buffer)
-{
-  if (only_set && _gtk_bitmask_is_empty (self->property_set))
-    {
-      g_string_append (buffer, "{}");
-      return;
-    }
-
-  g_string_append (buffer, "{\n");
-
-  for (int i = 0; i < G_N_ELEMENTS (property_names); i++)
-    {
-      if (only_set && !_gtk_bitmask_get (self->property_set, i))
-        continue;
-
-      g_string_append (buffer, "    ");
-      g_string_append (buffer, property_names[i]);
-      g_string_append (buffer, ": ");
-
-      gtk_accessible_value_print (self->property_values[i], buffer);
-
-      g_string_append (buffer, ",\n");
-    }
-
-  g_string_append (buffer, "}");
-}
-
-/*< private >
- * gtk_accessible_property_set_to_string:
- * @self: a #GtkAccessiblePropertySet
- *
- * Prints the contents of a #GtkAccessiblePropertySet into a string.
- *
- * Returns: (transfer full): a newly allocated string with the contents
- *   of the #GtkAccessiblePropertySet
- */
-char *
-gtk_accessible_property_set_to_string (GtkAccessiblePropertySet *self)
-{
-  GString *buf = g_string_new (NULL);
-
-  gtk_accessible_property_set_print (self, TRUE, buf);
-
-  return g_string_free (buf, FALSE);
-}
diff --git a/gtk/gtkaccessiblepropertysetprivate.h b/gtk/gtkaccessiblepropertysetprivate.h
deleted file mode 100644 (file)
index a687437..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/* gtkaccessiblepropertysetprivate.h: Accessible property set
- *
- * Copyright 2020  GNOME Foundation
- *
- * SPDX-License-Identifier: LGPL-2.1-or-later
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-#include "gtkaccessibleprivate.h"
-#include "gtkaccessiblevalueprivate.h"
-
-G_BEGIN_DECLS
-
-typedef struct _GtkAccessiblePropertySet   GtkAccessiblePropertySet;
-
-GtkAccessiblePropertySet *      gtk_accessible_property_set_new         (void);
-GtkAccessiblePropertySet *      gtk_accessible_property_set_ref         (GtkAccessiblePropertySet *self);
-void                            gtk_accessible_property_set_unref       (GtkAccessiblePropertySet *self);
-
-void                            gtk_accessible_property_set_add         (GtkAccessiblePropertySet *self,
-                                                                         GtkAccessibleProperty     property,
-                                                                         GtkAccessibleValue       *value);
-void                            gtk_accessible_property_set_remove      (GtkAccessiblePropertySet *self,
-                                                                         GtkAccessibleProperty     property);
-gboolean                        gtk_accessible_property_set_contains    (GtkAccessiblePropertySet *self,
-                                                                         GtkAccessibleProperty     property);
-GtkAccessibleValue *            gtk_accessible_property_set_get_value   (GtkAccessiblePropertySet *self,
-                                                                         GtkAccessibleProperty     property);
-
-void                            gtk_accessible_property_set_print       (GtkAccessiblePropertySet *self,
-                                                                         gboolean                  only_set,
-                                                                         GString                  *string);
-char *                          gtk_accessible_property_set_to_string   (GtkAccessiblePropertySet *self);
-
-G_END_DECLS
diff --git a/gtk/gtkaccessiblerelationset.c b/gtk/gtkaccessiblerelationset.c
deleted file mode 100644 (file)
index 2e6a64b..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-/* gtkaccessiblerelationset.c: Accessible relation set
- *
- * Copyright 2020  GNOME Foundation
- *
- * SPDX-License-Identifier: LGPL-2.1-or-later
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "config.h"
-
-#include "gtkaccessiblerelationsetprivate.h"
-
-#include "gtkbitmaskprivate.h"
-#include "gtkenums.h"
-
-/* Keep in sync with GtkAccessibleRelation in gtkenums.h */
-#define LAST_RELATION GTK_ACCESSIBLE_RELATION_SET_SIZE
-
-struct _GtkAccessibleRelationSet
-{
-  GtkBitmask *relation_set;
-
-  GtkAccessibleValue **relation_values;
-};
-
-static GtkAccessibleRelationSet *
-gtk_accessible_relation_set_init (GtkAccessibleRelationSet *self)
-{
-  self->relation_set = _gtk_bitmask_new ();
-  self->relation_values = g_new (GtkAccessibleValue *, LAST_RELATION);
-
-  /* Initialize all relation values, so we can always get the full set */
-  for (int i = 0; i < LAST_RELATION; i++)
-    self->relation_values[i] = gtk_accessible_value_get_default_for_relation (i);
-
-  return self;
-}
-
-GtkAccessibleRelationSet *
-gtk_accessible_relation_set_new (void)
-{
-  GtkAccessibleRelationSet *set = g_rc_box_new0 (GtkAccessibleRelationSet);
-
-  return gtk_accessible_relation_set_init (set);
-}
-
-GtkAccessibleRelationSet *
-gtk_accessible_relation_set_ref (GtkAccessibleRelationSet *self)
-{
-  g_return_val_if_fail (self != NULL, NULL);
-
-  return g_rc_box_acquire (self);
-}
-
-static void
-gtk_accessible_relation_set_free (gpointer data)
-{
-  GtkAccessibleRelationSet *self = data;
-
-  for (int i = 0; i < LAST_RELATION; i++)
-    {
-      if (self->relation_values[i] != NULL)
-        gtk_accessible_value_unref (self->relation_values[i]);
-    }
-
-  g_free (self->relation_values);
-
-  _gtk_bitmask_free (self->relation_set);
-}
-
-void
-gtk_accessible_relation_set_unref (GtkAccessibleRelationSet *self)
-{
-  g_rc_box_release_full (self, gtk_accessible_relation_set_free);
-}
-
-void
-gtk_accessible_relation_set_add (GtkAccessibleRelationSet *self,
-                                 GtkAccessibleRelation     relation,
-                                 GtkAccessibleValue       *value)
-{
-  g_return_if_fail (relation >= GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT &&
-                    relation <= GTK_ACCESSIBLE_RELATION_SET_SIZE);
-
-  if (gtk_accessible_relation_set_contains (self, relation))
-    gtk_accessible_value_unref (self->relation_values[relation]);
-  else
-    self->relation_set = _gtk_bitmask_set (self->relation_set, relation, TRUE);
-
-  self->relation_values[relation] = gtk_accessible_value_ref (value);
-}
-
-void
-gtk_accessible_relation_set_remove (GtkAccessibleRelationSet *self,
-                                    GtkAccessibleRelation     relation)
-{
-  g_return_if_fail (relation >= GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT &&
-                    relation <= GTK_ACCESSIBLE_RELATION_SET_SIZE);
-
-  if (gtk_accessible_relation_set_contains (self, relation))
-    {
-      g_clear_pointer (&(self->relation_values[relation]), gtk_accessible_value_unref);
-      self->relation_set = _gtk_bitmask_set (self->relation_set, relation, FALSE);
-    }
-}
-
-gboolean
-gtk_accessible_relation_set_contains (GtkAccessibleRelationSet *self,
-                                      GtkAccessibleRelation     relation)
-{
-  g_return_val_if_fail (relation >= GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT &&
-                        relation <= GTK_ACCESSIBLE_RELATION_SET_SIZE,
-                        FALSE);
-
-  return _gtk_bitmask_get (self->relation_set, relation);
-}
-
-GtkAccessibleValue *
-gtk_accessible_relation_set_get_value (GtkAccessibleRelationSet *self,
-                                       GtkAccessibleRelation     relation)
-{
-  g_return_val_if_fail (relation >= GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT &&
-                        relation <= GTK_ACCESSIBLE_RELATION_SET_SIZE,
-                        NULL);
-
-  return self->relation_values[relation];
-}
-
-static const char *relation_names[] = {
-  [GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT] = "activedescendant",
-  [GTK_ACCESSIBLE_RELATION_COL_COUNT] = "colcount",
-  [GTK_ACCESSIBLE_RELATION_COL_INDEX] = "colindex",
-  [GTK_ACCESSIBLE_RELATION_COL_INDEX_TEXT] = "colindextext",
-  [GTK_ACCESSIBLE_RELATION_COL_SPAN] = "colspan",
-  [GTK_ACCESSIBLE_RELATION_CONTROLS] = "controls",
-  [GTK_ACCESSIBLE_RELATION_DESCRIBED_BY] = "describedby",
-  [GTK_ACCESSIBLE_RELATION_DETAILS] = "details",
-  [GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE] = "errormessage",
-  [GTK_ACCESSIBLE_RELATION_FLOW_TO] = "flowto",
-  [GTK_ACCESSIBLE_RELATION_LABELLED_BY] = "labelledby",
-  [GTK_ACCESSIBLE_RELATION_OWNS] = "owns",
-  [GTK_ACCESSIBLE_RELATION_POS_IN_SET] = "posinset",
-  [GTK_ACCESSIBLE_RELATION_ROW_COUNT] = "rowcount",
-  [GTK_ACCESSIBLE_RELATION_ROW_INDEX] = "rowindex",
-  [GTK_ACCESSIBLE_RELATION_ROW_INDEX_TEXT] = "rowindextext",
-  [GTK_ACCESSIBLE_RELATION_ROW_SPAN] = "rowspan",
-  [GTK_ACCESSIBLE_RELATION_SET_SIZE] = "setsize",
-};
-
-/*< private >
- * gtk_accessible_relation_set_print:
- * @self: a #GtkAccessibleRelationSet
- * @only_set: %TRUE if only the set relations should be printed
- * @buffer: a #GString
- *
- * Prints the contents of the #GtkAccessibleRelationSet into @buffer.
- */
-void
-gtk_accessible_relation_set_print (GtkAccessibleRelationSet *self,
-                                   gboolean               only_set,
-                                   GString               *buffer)
-{
-  if (only_set && _gtk_bitmask_is_empty (self->relation_set))
-    {
-      g_string_append (buffer, "{}");
-      return;
-    }
-
-  g_string_append (buffer, "{\n");
-
-  for (int i = 0; i < G_N_ELEMENTS (relation_names); i++)
-    {
-      if (only_set && !_gtk_bitmask_get (self->relation_set, i))
-        continue;
-
-      g_string_append (buffer, "    ");
-      g_string_append (buffer, relation_names[i]);
-      g_string_append (buffer, ": ");
-
-      gtk_accessible_value_print (self->relation_values[i], buffer);
-
-      g_string_append (buffer, ",\n");
-    }
-
-  g_string_append (buffer, "}");
-}
-
-/*< private >
- * gtk_accessible_relation_set_to_string:
- * @self: a #GtkAccessibleRelationSet
- *
- * Prints the contents of a #GtkAccessibleRelationSet into a string.
- *
- * Returns: (transfer full): a newly allocated string with the contents
- *   of the #GtkAccessibleRelationSet
- */
-char *
-gtk_accessible_relation_set_to_string (GtkAccessibleRelationSet *self)
-{
-  GString *buf = g_string_new (NULL);
-
-  gtk_accessible_relation_set_print (self, TRUE, buf);
-
-  return g_string_free (buf, FALSE);
-}
diff --git a/gtk/gtkaccessiblerelationsetprivate.h b/gtk/gtkaccessiblerelationsetprivate.h
deleted file mode 100644 (file)
index a2a33f9..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/* gtkaccessiblerelationsetprivate.h: Accessible relations set
- *
- * Copyright 2020  GNOME Foundation
- *
- * SPDX-License-Identifier: LGPL-2.1-or-later
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-#include "gtkaccessibleprivate.h"
-#include "gtkaccessiblevalueprivate.h"
-
-G_BEGIN_DECLS
-
-typedef struct _GtkAccessibleRelationSet   GtkAccessibleRelationSet;
-
-GtkAccessibleRelationSet *      gtk_accessible_relation_set_new         (void);
-GtkAccessibleRelationSet *      gtk_accessible_relation_set_ref         (GtkAccessibleRelationSet *self);
-void                            gtk_accessible_relation_set_unref       (GtkAccessibleRelationSet *self);
-
-void                            gtk_accessible_relation_set_add         (GtkAccessibleRelationSet *self,
-                                                                         GtkAccessibleRelation     state,
-                                                                         GtkAccessibleValue       *value);
-void                            gtk_accessible_relation_set_remove      (GtkAccessibleRelationSet *self,
-                                                                         GtkAccessibleRelation     state);
-gboolean                        gtk_accessible_relation_set_contains    (GtkAccessibleRelationSet *self,
-                                                                         GtkAccessibleRelation     state);
-GtkAccessibleValue *            gtk_accessible_relation_set_get_value   (GtkAccessibleRelationSet *self,
-                                                                         GtkAccessibleRelation     state);
-
-void                            gtk_accessible_relation_set_print       (GtkAccessibleRelationSet *self,
-                                                                         gboolean                  only_set,
-                                                                         GString                  *string);
-char *                          gtk_accessible_relation_set_to_string   (GtkAccessibleRelationSet *self);
-
-G_END_DECLS
diff --git a/gtk/gtkaccessiblestateset.c b/gtk/gtkaccessiblestateset.c
deleted file mode 100644 (file)
index 7996258..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-/* gtkaccessiblestateset.c: Accessible state
- *
- * Copyright 2020  GNOME Foundation
- *
- * SPDX-License-Identifier: LGPL-2.1-or-later
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "config.h"
-
-#include "gtkaccessiblestatesetprivate.h"
-
-#include "gtkbitmaskprivate.h"
-#include "gtkenums.h"
-
-/* Keep in sync with GtkAccessibleState in gtkenums.h */
-#define LAST_STATE GTK_ACCESSIBLE_STATE_SELECTED
-
-struct _GtkAccessibleStateSet
-{
-  GtkBitmask *states_set;
-
-  GtkAccessibleValue **state_values;
-};
-
-static GtkAccessibleStateSet *
-gtk_accessible_state_set_init (GtkAccessibleStateSet *self)
-{
-  self->states_set = _gtk_bitmask_new ();
-  self->state_values = g_new (GtkAccessibleValue*, LAST_STATE);
-
-  /* Initialize all state values, so we can always get the full state */
-  for (int i = 0; i < LAST_STATE; i++)
-    self->state_values[i] = gtk_accessible_value_get_default_for_state (i);
-
-  return self;
-}
-
-GtkAccessibleStateSet *
-gtk_accessible_state_set_new (void)
-{
-  GtkAccessibleStateSet *set = g_rc_box_new0 (GtkAccessibleStateSet);
-
-  return gtk_accessible_state_set_init (set);
-}
-
-GtkAccessibleStateSet *
-gtk_accessible_state_set_ref (GtkAccessibleStateSet *self)
-{
-  g_return_val_if_fail (self != NULL, NULL);
-
-  return g_rc_box_acquire (self);
-}
-
-static void
-gtk_accessible_state_set_free (gpointer data)
-{
-  GtkAccessibleStateSet *self = data;
-
-  for (int i = 0; i < LAST_STATE; i++)
-    {
-      if (self->state_values[i] != NULL)
-        gtk_accessible_value_unref (self->state_values[i]);
-    }
-
-  g_free (self->state_values);
-
-  _gtk_bitmask_free (self->states_set);
-}
-
-void
-gtk_accessible_state_set_unref (GtkAccessibleStateSet *self)
-{
-  g_rc_box_release_full (self, gtk_accessible_state_set_free);
-}
-
-void
-gtk_accessible_state_set_add (GtkAccessibleStateSet *self,
-                              GtkAccessibleState     state,
-                              GtkAccessibleValue    *value)
-{
-  g_return_if_fail (state >= GTK_ACCESSIBLE_STATE_BUSY &&
-                    state <= GTK_ACCESSIBLE_STATE_SELECTED);
-
-  if (gtk_accessible_state_set_contains (self, state))
-    gtk_accessible_value_unref (self->state_values[state]);
-  else
-    self->states_set = _gtk_bitmask_set (self->states_set, state, TRUE);
-
-  self->state_values[state] = gtk_accessible_value_ref (value);
-}
-
-void
-gtk_accessible_state_set_remove (GtkAccessibleStateSet *self,
-                                 GtkAccessibleState     state)
-{
-  g_return_if_fail (state >= GTK_ACCESSIBLE_STATE_BUSY &&
-                    state <= GTK_ACCESSIBLE_STATE_SELECTED);
-
-  if (gtk_accessible_state_set_contains (self, state))
-    {
-      g_clear_pointer (&(self->state_values[state]), gtk_accessible_value_unref);
-      self->states_set = _gtk_bitmask_set (self->states_set, state, FALSE);
-    }
-}
-
-gboolean
-gtk_accessible_state_set_contains (GtkAccessibleStateSet *self,
-                                   GtkAccessibleState     state)
-{
-  g_return_val_if_fail (state >= GTK_ACCESSIBLE_STATE_BUSY &&
-                        state <= GTK_ACCESSIBLE_STATE_SELECTED,
-                        FALSE);
-
-  return _gtk_bitmask_get (self->states_set, state);
-}
-
-GtkAccessibleValue *
-gtk_accessible_state_set_get_value (GtkAccessibleStateSet *self,
-                                    GtkAccessibleState     state)
-{
-  g_return_val_if_fail (state >= GTK_ACCESSIBLE_STATE_BUSY &&
-                        state <= GTK_ACCESSIBLE_STATE_SELECTED,
-                        NULL);
-
-  return self->state_values[state];
-}
-
-static const char *state_names[] = {
-  [GTK_ACCESSIBLE_STATE_BUSY]     = "busy",
-  [GTK_ACCESSIBLE_STATE_CHECKED]  = "checked",
-  [GTK_ACCESSIBLE_STATE_DISABLED] = "disabled",
-  [GTK_ACCESSIBLE_STATE_EXPANDED] = "expanded",
-  [GTK_ACCESSIBLE_STATE_HIDDEN]   = "hidden",
-  [GTK_ACCESSIBLE_STATE_INVALID]  = "invalid",
-  [GTK_ACCESSIBLE_STATE_PRESSED]  = "pressed",
-  [GTK_ACCESSIBLE_STATE_SELECTED] = "selected",
-};
-
-/*< private >
- * gtk_accessible_state_set_print:
- * @self: a #GtkAccessibleStateSet
- * @only_set: %TRUE if only the set states should be printed
- * @buffer: a #GString
- *
- * Prints the contents of the #GtkAccessibleStateSet into @buffer.
- */
-void
-gtk_accessible_state_set_print (GtkAccessibleStateSet *self,
-                                gboolean               only_set,
-                                GString               *buffer)
-{
-  if (only_set && _gtk_bitmask_is_empty (self->states_set))
-    {
-      g_string_append (buffer, "{}");
-      return;
-    }
-
-  g_string_append (buffer, "{\n");
-
-  for (int i = 0; i < G_N_ELEMENTS (state_names); i++)
-    {
-      if (only_set && !_gtk_bitmask_get (self->states_set, i))
-        continue;
-
-      g_string_append (buffer, "    ");
-      g_string_append (buffer, state_names[i]);
-      g_string_append (buffer, ": ");
-
-      gtk_accessible_value_print (self->state_values[i], buffer);
-
-      g_string_append (buffer, ",\n");
-    }
-
-  g_string_append (buffer, "}");
-}
-
-/*< private >
- * gtk_accessible_state_set_to_string:
- * @self: a #GtkAccessibleStateSet
- *
- * Prints the contents of a #GtkAccessibleStateSet into a string.
- *
- * Returns: (transfer full): a newly allocated string with the contents
- *   of the #GtkAccessibleStateSet
- */
-char *
-gtk_accessible_state_set_to_string (GtkAccessibleStateSet *self)
-{
-  GString *buf = g_string_new (NULL);
-
-  gtk_accessible_state_set_print (self, TRUE, buf);
-
-  return g_string_free (buf, FALSE);
-}
diff --git a/gtk/gtkaccessiblestatesetprivate.h b/gtk/gtkaccessiblestatesetprivate.h
deleted file mode 100644 (file)
index 55d16aa..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/* gtkaccessiblestatesetprivate.h: Accessible state container
- *
- * Copyright 2020  GNOME Foundation
- *
- * SPDX-License-Identifier: LGPL-2.1-or-later
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-#include "gtkaccessibleprivate.h"
-#include "gtkaccessiblevalueprivate.h"
-
-G_BEGIN_DECLS
-
-typedef struct _GtkAccessibleStateSet   GtkAccessibleStateSet;
-
-GtkAccessibleStateSet * gtk_accessible_state_set_new            (void);
-GtkAccessibleStateSet * gtk_accessible_state_set_ref            (GtkAccessibleStateSet *self);
-void                    gtk_accessible_state_set_unref          (GtkAccessibleStateSet *self);
-
-void                    gtk_accessible_state_set_add            (GtkAccessibleStateSet *self,
-                                                                 GtkAccessibleState     state,
-                                                                 GtkAccessibleValue    *value);
-void                    gtk_accessible_state_set_remove         (GtkAccessibleStateSet *self,
-                                                                 GtkAccessibleState     state);
-gboolean                gtk_accessible_state_set_contains       (GtkAccessibleStateSet *self,
-                                                                 GtkAccessibleState     state);
-GtkAccessibleValue *    gtk_accessible_state_set_get_value      (GtkAccessibleStateSet *self,
-                                                                 GtkAccessibleState     state);
-
-void                    gtk_accessible_state_set_print          (GtkAccessibleStateSet *self,
-                                                                 gboolean               only_set,
-                                                                 GString               *string);
-char *                  gtk_accessible_state_set_to_string      (GtkAccessibleStateSet *self);
-
-G_END_DECLS
index 6466678ad7fa6330323a09d332beffb5c0fad2ea..7ea1f1a6bb14dd034489a25b4acba78c7a588d6b 100644 (file)
@@ -56,9 +56,9 @@ gtk_at_context_finalize (GObject *gobject)
 {
   GtkATContext *self = GTK_AT_CONTEXT (gobject);
 
-  gtk_accessible_property_set_unref (self->properties);
-  gtk_accessible_relation_set_unref (self->relations);
-  gtk_accessible_state_set_unref (self->states);
+  gtk_accessible_attribute_set_unref (self->properties);
+  gtk_accessible_attribute_set_unref (self->relations);
+  gtk_accessible_attribute_set_unref (self->states);
 
   G_OBJECT_CLASS (gtk_at_context_parent_class)->finalize (gobject);
 }
@@ -114,9 +114,9 @@ gtk_at_context_real_state_change (GtkATContext                *self,
                                   GtkAccessibleStateChange     changed_states,
                                   GtkAccessiblePropertyChange  changed_properties,
                                   GtkAccessibleRelationChange  changed_relations,
-                                  GtkAccessibleStateSet       *states,
-                                  GtkAccessiblePropertySet    *properties,
-                                  GtkAccessibleRelationSet    *relations)
+                                  GtkAccessibleAttributeSet   *states,
+                                  GtkAccessibleAttributeSet   *properties,
+                                  GtkAccessibleAttributeSet   *relations)
 {
 }
 
@@ -166,14 +166,81 @@ gtk_at_context_class_init (GtkATContextClass *klass)
   g_object_class_install_properties (gobject_class, N_PROPS, obj_props);
 }
 
+#define N_PROPERTIES    (GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT + 1)
+#define N_RELATIONS     (GTK_ACCESSIBLE_RELATION_SET_SIZE + 1)
+#define N_STATES        (GTK_ACCESSIBLE_STATE_SELECTED + 1)
+
+static const char *property_attrs[] = {
+  [GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE]        = "autocomplete",
+  [GTK_ACCESSIBLE_PROPERTY_DESCRIPTION]         = "description",
+  [GTK_ACCESSIBLE_PROPERTY_HAS_POPUP]           = "haspopup",
+  [GTK_ACCESSIBLE_PROPERTY_KEY_SHORTCUTS]       = "keyshortcuts",
+  [GTK_ACCESSIBLE_PROPERTY_LABEL]               = "label",
+  [GTK_ACCESSIBLE_PROPERTY_LEVEL]               = "level",
+  [GTK_ACCESSIBLE_PROPERTY_MODAL]               = "modal",
+  [GTK_ACCESSIBLE_PROPERTY_MULTI_LINE]          = "multiline",
+  [GTK_ACCESSIBLE_PROPERTY_MULTI_SELECTABLE]    = "multiselectable",
+  [GTK_ACCESSIBLE_PROPERTY_ORIENTATION]         = "orientation",
+  [GTK_ACCESSIBLE_PROPERTY_PLACEHOLDER]         = "placeholder",
+  [GTK_ACCESSIBLE_PROPERTY_READ_ONLY]           = "readonly",
+  [GTK_ACCESSIBLE_PROPERTY_REQUIRED]            = "required",
+  [GTK_ACCESSIBLE_PROPERTY_ROLE_DESCRIPTION]    = "roledescription",
+  [GTK_ACCESSIBLE_PROPERTY_SORT]                = "sort",
+  [GTK_ACCESSIBLE_PROPERTY_VALUE_MAX]           = "valuemax",
+  [GTK_ACCESSIBLE_PROPERTY_VALUE_MIN]           = "valuemin",
+  [GTK_ACCESSIBLE_PROPERTY_VALUE_NOW]           = "valuenow",
+  [GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT]          = "valuetext",
+};
+
+static const char *relation_attrs[] = {
+  [GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT]   = "activedescendant",
+  [GTK_ACCESSIBLE_RELATION_COL_COUNT]           = "colcount",
+  [GTK_ACCESSIBLE_RELATION_COL_INDEX]           = "colindex",
+  [GTK_ACCESSIBLE_RELATION_COL_INDEX_TEXT]      = "colindextext",
+  [GTK_ACCESSIBLE_RELATION_COL_SPAN]            = "colspan",
+  [GTK_ACCESSIBLE_RELATION_CONTROLS]            = "controls",
+  [GTK_ACCESSIBLE_RELATION_DESCRIBED_BY]        = "describedby",
+  [GTK_ACCESSIBLE_RELATION_DETAILS]             = "details",
+  [GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE]       = "errormessage",
+  [GTK_ACCESSIBLE_RELATION_FLOW_TO]             = "flowto",
+  [GTK_ACCESSIBLE_RELATION_LABELLED_BY]         = "labelledby",
+  [GTK_ACCESSIBLE_RELATION_OWNS]                = "owns",
+  [GTK_ACCESSIBLE_RELATION_POS_IN_SET]          = "posinset",
+  [GTK_ACCESSIBLE_RELATION_ROW_COUNT]           = "rowcount",
+  [GTK_ACCESSIBLE_RELATION_ROW_INDEX]           = "rowindex",
+  [GTK_ACCESSIBLE_RELATION_ROW_INDEX_TEXT]      = "rowindextext",
+  [GTK_ACCESSIBLE_RELATION_ROW_SPAN]            = "rowspan",
+  [GTK_ACCESSIBLE_RELATION_SET_SIZE]            = "setsize",
+};
+
+static const char *state_attrs[] = {
+  [GTK_ACCESSIBLE_STATE_BUSY]           = "busy",
+  [GTK_ACCESSIBLE_STATE_CHECKED]        = "checked",
+  [GTK_ACCESSIBLE_STATE_DISABLED]       = "disabled",
+  [GTK_ACCESSIBLE_STATE_EXPANDED]       = "expanded",
+  [GTK_ACCESSIBLE_STATE_HIDDEN]         = "hidden",
+  [GTK_ACCESSIBLE_STATE_INVALID]        = "invalid",
+  [GTK_ACCESSIBLE_STATE_PRESSED]        = "pressed",
+  [GTK_ACCESSIBLE_STATE_SELECTED]       = "selected",
+};
+
 static void
 gtk_at_context_init (GtkATContext *self)
 {
   self->accessible_role = GTK_ACCESSIBLE_ROLE_WIDGET;
 
-  self->properties = gtk_accessible_property_set_new ();
-  self->relations = gtk_accessible_relation_set_new ();
-  self->states = gtk_accessible_state_set_new ();
+  self->properties =
+    gtk_accessible_attribute_set_new (N_PROPERTIES,
+                                      property_attrs,
+                                      (GtkAccessibleAttributeDefaultFunc) gtk_accessible_value_get_default_for_property);
+  self->relations =
+    gtk_accessible_attribute_set_new (N_RELATIONS,
+                                      relation_attrs,
+                                      (GtkAccessibleAttributeDefaultFunc) gtk_accessible_value_get_default_for_relation);
+  self->states =
+    gtk_accessible_attribute_set_new (N_STATES,
+                                      state_attrs,
+                                      (GtkAccessibleAttributeDefaultFunc) gtk_accessible_value_get_default_for_state);
 }
 
 /**
@@ -271,27 +338,12 @@ gtk_at_context_update (GtkATContext *self)
 {
   g_return_if_fail (GTK_IS_AT_CONTEXT (self));
 
-  GtkAccessibleStateChange changed_states = 0;
-  GtkAccessiblePropertyChange changed_properties = 0;
-  GtkAccessibleRelationChange changed_relations = 0;
-
-  for (int i = 0; i < GTK_ACCESSIBLE_STATE_SELECTED; i++)
-    {
-      if (gtk_accessible_state_set_contains (self->states, i))
-        changed_states |= (1 << i);
-    }
-
-  for (int i = 0; i < GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT; i++)
-    {
-      if (gtk_accessible_property_set_contains (self->properties, i))
-        changed_properties |= (1 << i);
-    }
-
-  for (int i = 0; i < GTK_ACCESSIBLE_RELATION_SET_SIZE; i++)
-    {
-      if (gtk_accessible_relation_set_contains (self->relations, i))
-        changed_relations |= (1 << i);
-    }
+  GtkAccessibleStateChange changed_states =
+    gtk_accessible_attribute_set_get_changed (self->states);
+  GtkAccessiblePropertyChange changed_properties =
+    gtk_accessible_attribute_set_get_changed (self->properties);
+  GtkAccessibleRelationChange changed_relations =
+    gtk_accessible_attribute_set_get_changed (self->relations);
 
   GTK_AT_CONTEXT_GET_CLASS (self)->state_change (self,
                                                  changed_states,
@@ -323,9 +375,9 @@ gtk_at_context_set_accessible_state (GtkATContext       *self,
   g_return_if_fail (GTK_IS_AT_CONTEXT (self));
 
   if (value != NULL)
-    gtk_accessible_state_set_add (self->states, state, value);
+    gtk_accessible_attribute_set_add (self->states, state, value);
   else
-    gtk_accessible_state_set_remove (self->states, state);
+    gtk_accessible_attribute_set_remove (self->states, state);
 }
 
 /*< private >
@@ -349,9 +401,9 @@ gtk_at_context_set_accessible_property (GtkATContext          *self,
   g_return_if_fail (GTK_IS_AT_CONTEXT (self));
 
   if (value != NULL)
-    gtk_accessible_property_set_add (self->properties, property, value);
+    gtk_accessible_attribute_set_add (self->properties, property, value);
   else
-    gtk_accessible_property_set_remove (self->properties, property);
+    gtk_accessible_attribute_set_remove (self->properties, property);
 }
 
 /*< private >
@@ -375,7 +427,7 @@ gtk_at_context_set_accessible_relation (GtkATContext          *self,
   g_return_if_fail (GTK_IS_AT_CONTEXT (self));
 
   if (value != NULL)
-    gtk_accessible_relation_set_add (self->relations, relation, value);
+    gtk_accessible_attribute_set_add (self->relations, relation, value);
   else
-    gtk_accessible_relation_set_remove (self->relations, relation);
+    gtk_accessible_attribute_set_remove (self->relations, relation);
 }
index ee7a6dea7c712ed927cb7393df626e7da31c5b54..c7f59f8faef24a3e0ee6676525fda67befcf9e8c 100644 (file)
@@ -22,9 +22,7 @@
 
 #include "gtkatcontext.h"
 
-#include "gtkaccessiblepropertysetprivate.h"
-#include "gtkaccessiblerelationsetprivate.h"
-#include "gtkaccessiblestatesetprivate.h"
+#include "gtkaccessibleattributesetprivate.h"
 
 G_BEGIN_DECLS
 
@@ -89,9 +87,9 @@ struct _GtkATContext
   GtkAccessibleRole accessible_role;
   GtkAccessible *accessible;
 
-  GtkAccessibleStateSet *states;
-  GtkAccessiblePropertySet *properties;
-  GtkAccessibleRelationSet *relations;
+  GtkAccessibleAttributeSet *states;
+  GtkAccessibleAttributeSet *properties;
+  GtkAccessibleAttributeSet *relations;
 };
 
 struct _GtkATContextClass
@@ -102,9 +100,9 @@ struct _GtkATContextClass
                          GtkAccessibleStateChange     changed_states,
                          GtkAccessiblePropertyChange  changed_properties,
                          GtkAccessibleRelationChange  changed_relations,
-                         GtkAccessibleStateSet       *states,
-                         GtkAccessiblePropertySet    *properties,
-                         GtkAccessibleRelationSet    *relations);
+                         GtkAccessibleAttributeSet   *states,
+                         GtkAccessibleAttributeSet   *properties,
+                         GtkAccessibleAttributeSet   *relations);
 };
 
 GtkATContext *  gtk_at_context_create                   (GtkAccessibleRole      accessible_role,
index e9b7e8c0b41c0a02719e1d9908c731b4f273b28e..8eade3566cb4a31f1e9f4d8687fa31208579573f 100644 (file)
@@ -37,15 +37,15 @@ gtk_test_at_context_state_change (GtkATContext                *self,
                                   GtkAccessibleStateChange     changed_states,
                                   GtkAccessiblePropertyChange  changed_properties,
                                   GtkAccessibleRelationChange  changed_relations,
-                                  GtkAccessibleStateSet       *states,
-                                  GtkAccessiblePropertySet    *properties,
-                                  GtkAccessibleRelationSet    *relations)
+                                  GtkAccessibleAttributeSet   *states,
+                                  GtkAccessibleAttributeSet   *properties,
+                                  GtkAccessibleAttributeSet   *relations)
 {
   GtkAccessible *accessible = gtk_at_context_get_accessible (self);
   GtkAccessibleRole role = gtk_at_context_get_accessible_role (self);
-  char *states_str = gtk_accessible_state_set_to_string (states);
-  char *properties_str = gtk_accessible_property_set_to_string (properties);
-  char *relations_str = gtk_accessible_relation_set_to_string (relations);
+  char *states_str = gtk_accessible_attribute_set_to_string (states);
+  char *properties_str = gtk_accessible_attribute_set_to_string (properties);
+  char *relations_str = gtk_accessible_attribute_set_to_string (relations);
 
   g_print ("*** Accessible state changed for accessible ā€œ%sā€, with role %d:\n"
            "***     states = %s\n"
index ae3f81933fbace64633949d9e89ba7f119451055..2ae4267e968dfe1fd0618a7f19884025240a9cfa 100644 (file)
@@ -16,9 +16,7 @@ gtk_private_sources = files([
   'fnmatch.c',
   'tools/gdkpixbufutils.c',
   'gsettings-mapping.c',
-  'gtkaccessiblepropertyset.c',
-  'gtkaccessiblerelationset.c',
-  'gtkaccessiblestateset.c',
+  'gtkaccessibleattributeset.c',
   'gtkaccessiblevalue.c',
   'gtkaccessiblevaluestatic.c',
   'gtkactionhelper.c',